home *** CD-ROM | disk | FTP | other *** search
Text File | 2000-06-23 | 31.4 KB | 1,161 lines |
- /*
- File: DumpNetworkSetup.c
-
- Contains: Program to render Network Setup database as text.
-
- Written by: Quinn "The Eskimo!"
-
- Copyright: Copyright © 1998-1999 by Apple Computer, Inc., All Rights Reserved.
-
- You may incorporate this Apple sample source code into your program(s) without
- restriction. This Apple sample source code has been provided "AS IS" and the
- responsibility for its operation is yours. You are not permitted to redistribute
- this Apple sample source code as "Apple sample source code" after having made
- changes. If you're going to re-distribute the source, we require that you make
- it clear in the source that the code was descended from Apple sample source
- code, but that you've made changes.
-
- Change History (most recent first):
- 7/22/1999 Karl Groethe Updated for Metrowerks Codewarror Pro 2.1
-
-
- */
-
- // MoreIsBetter Setup
-
- #include "MoreSetup.h"
-
- // Pick up lots of OT interfaces.
-
- #include <OpenTransport.h>
- #include <OpenTptInternet.h>
- #include <OpenTptLinks.h>
-
- // Pick up standard system interfaces.
-
- #include <CodeFragments.h>
- #include <Resources.h>
- #include <Errors.h>
- #include <Fonts.h>
- #include <Windows.h>
- #include <Menus.h>
- #include <TextEdit.h>
- #include <Dialogs.h>
- #include <StandardFile.h>
- #include <DateTimeUtils.h>
-
- // Pick up ANSI C interfaces
-
- #include <stdio.h>
- #include <FSp_fopen.h>
- #include <string.h>
-
- // Pick up Network Setup stuff.
-
- // Because I'm using a pre-release version of "NetworkSetup.h",
- // which is intended to be released as part of a future version of
- // Universal Interfaces, I have to define CALL_NOT_IN_CARBON myself
- // if it's not already been defined.
-
- #ifndef CALL_NOT_IN_CARBON
- #define CALL_NOT_IN_CARBON 1
- #endif
-
- #include <NetworkSetup.h>
-
- /////////////////////////////////////////////////////////////////
- #pragma mark ----- Binary to String -----
-
- static char gFormatInetHostBuffer[256];
-
- static char *FormatInetHost(InetHost ipAddr)
- // Non-reentrant, but I don't care.
- {
- OTInetHostToString(ipAddr, gFormatInetHostBuffer);
- return gFormatInetHostBuffer;
- }
-
- static char *ClassToString(OSType class)
- {
- switch (class) {
- case kCfgClassAnyEntity:
- return "kCfgClassAnyEntity";
- break;
- case kCfgClassUnknownEntity:
- return "kCfgClassUnknownEntity";
- break;
- case kOTCfgClassNetworkConnection:
- return "kOTCfgClassNetworkConnection";
- break;
- case kOTCfgClassGlobalSettings:
- return "kOTCfgClassGlobalSettings";
- break;
- case kOTCfgClassServer:
- return "kOTCfgClassServer";
- break;
- case kOTCfgClassSetOfSettings:
- return "kOTCfgClassSetOfSettings";
- break;
- default:
- return "unknown";
- }
- }
-
- static char *TypeToString(OSType class)
- {
- switch (class) {
- case kCfgTypeAnyEntity:
- return "kCfgTypeAnyEntity";
- break;
- case kCfgTypeUnknownEntity:
- return "kCfgTypeUnknownEntity";
- break;
- case kOTCfgTypeAppleTalk:
- return "kOTCfgTypeAppleTalk";
- break;
- case kOTCfgTypeTCPv4:
- return "kOTCfgTypeTCPv4";
- break;
- case kOTCfgTypeTCPv6:
- return "kOTCfgTypeTCPv6";
- break;
- case kOTCfgTypeRemote:
- return "kOTCfgTypeRemote";
- break;
- case kOTCfgTypeDial:
- return "kOTCfgTypeDial";
- break;
- case kOTCfgTypeModem:
- return "kOTCfgTypeModem";
- break;
- case kOTCfgTypeInfrared:
- return "kOTCfgTypeInfrared";
- break;
- case kOTCfgTypeSetOfSettings:
- return "kOTCfgTypeSetOfSettings";
- break;
- case kOTCfgTypeDNS:
- return "kOTCfgTypeDNS";
- break;
- case kOTCfgTypeGeneric:
- return "kOTCfgTypeGeneric";
- break;
- default:
- return "unknown";
- }
- }
-
- static char *TCPConfigMethodToString(UInt8 configMethod)
- {
- switch (configMethod) {
- case 0:
- return "Manual";
- break;
- case 1:
- return "RARP";
- break;
- case 2:
- return "BOOTP";
- break;
- case 3:
- return "DHCP";
- break;
- case 4:
- return "MacIP";
- break;
- default:
- return "unknown";
- }
- }
-
- static FILE *gOutput;
-
- static void DefaultPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
- UInt32 row;
- UInt32 col;
- UInt32 rowCount;
- UInt8 ch;
-
- rowCount = (length - 1) / 16 + 1;
- for (row = 0; row < rowCount; row++) {
- fprintf(gOutput, " %04lX : ", row * 16);
- for (col = 0; col < 16; col++) {
- if ( (row * 16) + col < length ) {
- fprintf(gOutput, "%02X ", data[(row * 16) + col]);
- } else {
- fprintf(gOutput, " ");
- }
- }
- for (col = 0; col < 16; col++) {
- if ( (row * 16) + col < length ) {
- ch = data[(row * 16) + col];
- if ( ch < ' ' || ch == 127 ) {
- fprintf(gOutput, ".");
- } else {
- fprintf(gOutput, "%c", ch);
- }
- }
- }
- fprintf(gOutput, "\n");
- }
- }
-
- static void DecimalPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
-
- switch (length) {
- case sizeof(SInt8):
- fprintf(gOutput, " value = %d\n", *((SInt8*) data));
- break;
- case sizeof(SInt16):
- fprintf(gOutput, " value = %ld\n", *((SInt16*) data));
- break;
- case sizeof(SInt32):
- fprintf(gOutput, " value = %ld\n", *((SInt32*) data));
- break;
- default:
- fprintf(gOutput, "••• DecimalPrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- break;
- }
- }
-
- static void PStringPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
-
- if ((*data + 1) != length) {
- fprintf(gOutput, "••• PStringPrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- fprintf(gOutput, " “\\p%#s”\n", data);
- }
- }
-
- static void CStringPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
-
- if ((strlen((char *) data) + 1) != length) {
- fprintf(gOutput, "••• CStringPrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- fprintf(gOutput, " “%s”\n", data);
- }
- }
-
- static void DateTimePrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
- UInt32 dateTime;
- Str255 dateStr;
- Str255 timeStr;
-
- if (length != sizeof(UInt32)) {
- fprintf(gOutput, "••• DateTimePrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- dateTime = *((UInt32 *) data);
- DateString(dateTime, shortDate, dateStr, nil);
- TimeString(dateTime, true, timeStr, nil);
- fprintf(gOutput, " %#s, %#s\n", dateStr, timeStr);
- }
- }
-
- static void DeviceTypePrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
- char *str;
- Boolean printRaw;
- UInt16 value;
-
- if (length != sizeof(UInt16)) {
- fprintf(gOutput, "••• DeviceTypePrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- printRaw = false;
- value = *((UInt16 *) data);
- switch ( value ) {
- case kOTNoDeviceType: str = "kOTNoDeviceType"; break;
- case kOTADEVDevice: str = "kOTADEVDevice"; break;
- case kOTMDEVDevice: str = "kOTMDEVDevice"; break;
- case kOTLocalTalkDevice: str = "kOTLocalTalkDevice"; break;
- case kOTIRTalkDevice: str = "kOTIRTalkDevice"; break;
- case kOTTokenRingDevice: str = "kOTTokenRingDevice"; break;
- case kOTISDNDevice: str = "kOTISDNDevice"; break;
- case kOTATMDevice: str = "kOTATMDevice"; break;
- case kOTSMDSDevice: str = "kOTSMDSDevice"; break;
- case kOTSerialDevice: str = "kOTSerialDevice"; break;
- case kOTEthernetDevice: str = "kOTEthernetDevice"; break;
- case kOTSLIPDevice: str = "kOTSLIPDevice"; break;
- case kOTPPPDevice: str = "kOTPPPDevice"; break;
- case kOTModemDevice: str = "kOTModemDevice"; break;
- case kOTFastEthernetDevice: str = "kOTFastEthernetDevice"; break;
- case kOTFDDIDevice: str = "kOTFDDIDevice"; break;
- case kOTIrDADevice: str = "kOTIrDADevice"; break;
- case kOTATMSNAPDevice: str = "kOTATMSNAPDevice"; break;
- case kOTFibreChannelDevice: str = "kOTFibreChannelDevice"; break;
- case kOTFireWireDevice: str = "kOTFireWireDevice"; break;
- case kOTPseudoDevice: str = "kOTPseudoDevice"; break;
- default: str = "unknown"; printRaw = true; break;
- }
- fprintf(gOutput, " %s (%d)\n", str, value);
- if (printRaw){
- DefaultPrinter(data, length, nil);
- }
- }
- }
-
- static Boolean UnpackTCPSearchList(const UInt8 *data, ByteCount length, OTCfgHSTFPrefs *searchListPref)
- {
- const UInt8 *cursor;
- MoreAssertQ(data != nil);
- MoreAssertQ(searchListPref != nil);
-
- cursor = data;
- if (cursor + sizeof(SInt8) <= data + length) {
- searchListPref->fPrimaryInterfaceIndex = *cursor;
- cursor += sizeof(SInt8);
- }
- if (cursor + *cursor + 1 <= data + length) {
- BlockMoveData(cursor, searchListPref->fLocalDomainName, *cursor + 1);
- cursor += (*cursor + 1);
- }
- if (cursor + *cursor + 1 <= data + length) {
- BlockMoveData(cursor, searchListPref->admindomain, *cursor + 1);
- cursor += (*cursor + 1);
- }
- return (cursor == data + length);
- }
-
- static void TCPSearchListPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
- OTCfgHSTFPrefs searchListPref;
-
- if ( ! UnpackTCPSearchList(data, length, &searchListPref) ) {
- fprintf(gOutput, "••• TCPSearchListPrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- fprintf(gOutput, " fPrimaryInterfaceIndex = %d\n", searchListPref.fPrimaryInterfaceIndex);
- fprintf(gOutput, " fLocalDomainName = “\\p%#s”\n", searchListPref.fLocalDomainName);
- fprintf(gOutput, " admindomain = “\\p%#s”\n", searchListPref.admindomain);
- }
- }
-
- static void TCPServersListPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
- SInt16 serverCount;
- ItemCount serverIndex;
-
- serverCount = ((OTCfgIDNSPrefs *) data)->fCount;
- if ( length < sizeof(SInt16) || length != (sizeof(SInt16) + serverCount * sizeof(InetHost))) {
- fprintf(gOutput, "••• TCPSearchListPrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- fprintf(gOutput, " fCount = %d\n", serverCount);
- for (serverIndex = 0; serverIndex < serverCount; serverIndex++) {
- fprintf(gOutput, " fAddressesList[%d] = %s\n", serverIndex,
- FormatInetHost((&((OTCfgIDNSPrefs *)data)->fAddressesList)[serverIndex]));
- }
- }
- }
-
- static void TCPUnloadTypeAtrrPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
- SInt16 value;
- char *name;
-
- if ( length != sizeof(SInt16) ) {
- fprintf(gOutput, "••• TCPUnloadTypeAtrrPrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- value = *((SInt16*)data);
- switch ( value ) {
- case 1: name = "kActiveLoadedOnDemand"; break;
- case 2: name = "kActiveAlwaysLoaded"; break;
- case 3: name = "kInactive"; break;
- default: name = "unknown"; break;
- }
- fprintf(gOutput, " %s (%d)\n", name, value);
- }
- }
-
- static Boolean UnpackOTCfgIITFPrefs(const UInt8 *data, ByteCount length, UInt8 **cursorPtr,
- OTCfgIITFPrefs *unpacked, Str255 appleTalkZone)
- {
- Boolean ok;
- UInt8 *cursor;
-
- MoreAssertQ(data != nil);
- MoreAssertQ(cursorPtr != nil);
- MoreAssertQ(*cursorPtr >= data && *cursorPtr < data + length);
- MoreAssertQ(unpacked != nil);
- MoreAssertQ(appleTalkZone != nil);
-
- cursor = *cursorPtr;
- ok = true;
- unpacked->fCount = 0;
-
- if ( ok && (cursor + sizeof(UInt8) <= data + length) ) {
- unpacked->fConfigMethod = *cursor;
- cursor += sizeof(UInt8);
- } else {
- ok = false;
- }
- if ( ok && (cursor + sizeof(InetHost) <= data + length) ) {
- BlockMoveData(cursor, &unpacked->fIPAddress, sizeof(InetHost));
- cursor += sizeof(InetHost);
- } else {
- ok = false;
- }
- if ( ok && (cursor + sizeof(InetHost) <= data + length) ) {
- BlockMoveData(cursor, &unpacked->fSubnetMask, sizeof(InetHost));
- cursor += sizeof(InetHost);
- } else {
- ok = false;
- }
- if ( ok && (cursor + sizeof(SInt8) <= data + length) ) {
- // OTCfgIITFPrefs only defines 1 byte of storage for fAppleTalkZone,
- // so we have to return it in an extra Str255 parameter.
- unpacked->fAppleTalkZone[0] = 0;
- appleTalkZone[0] = *cursor;
- cursor += sizeof(UInt8);
- } else {
- ok = false;
- }
-
- // Who the hell thought putting a packed pascal string into the middle
- // of a structure was a good idea!?!
-
- if ( ok && (cursor + appleTalkZone[0] <= data + length) ) {
- BlockMoveData(cursor, &appleTalkZone[1], appleTalkZone[0]);
- cursor += appleTalkZone[0];
- } else {
- ok = false;
- }
-
- if ( ok && (cursor + 36 <= data + length) ) {
- BlockMoveData(cursor, unpacked->part.path, 36);
- cursor += 36;
- } else {
- ok = false;
- }
- if ( ok && (cursor + 32 <= data + length) ) {
- BlockMoveData(cursor, unpacked->part.module, 32);
- cursor += 32;
- } else {
- ok = false;
- }
- if ( ok && (cursor + sizeof(UInt32) <= data + length) ) {
- BlockMoveData(cursor, &unpacked->part.framing, sizeof(UInt32));
- cursor += sizeof(UInt32);
- } else {
- ok = false;
- }
-
- *cursorPtr = cursor;
- return ok;
- }
-
- static void TCPPrefsPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
- UInt8 *cursor;
- SInt16 prefCount;
- SInt16 prefIndex;
- OTCfgIITFPrefs prefData;
- Str255 appleTalkZone;
-
- if ( length < sizeof(SInt16) ) {
- fprintf(gOutput, "••• TCPPrefsPrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- cursor = data;
- prefCount = *((SInt16 *)cursor);
- cursor += sizeof(SInt16);
-
- fprintf(gOutput, " fCount = %d\n", prefCount);
- for (prefIndex = 0; prefIndex < prefCount; prefIndex++) {
- fprintf(gOutput, " [%d]\n", prefIndex);
- if ( UnpackOTCfgIITFPrefs(data, length, &cursor, &prefData, appleTalkZone) ) {
- fprintf(gOutput, " fConfigMethod = %s (%d)\n", TCPConfigMethodToString(prefData.fConfigMethod), prefData.fConfigMethod);
- fprintf(gOutput, " fIPAddress = %s\n", FormatInetHost( *((InetHost *) prefData.fIPAddress)));
- fprintf(gOutput, " fSubnetMask = %s\n", FormatInetHost( *((InetHost *) prefData.fSubnetMask)));
- fprintf(gOutput, " fAppleTalkZone = “%#s”\n", appleTalkZone);
- fprintf(gOutput, " part.path = “%#s”\n", prefData.part.path);
- fprintf(gOutput, " part.module = “%#s”\n", prefData.part.module);
- fprintf(gOutput, " part.framing = %08x\n", prefData.part.framing);
- } else {
- fprintf(gOutput, "••• TCPPrefsPrinter: Error parsing data data\n");
- DefaultPrinter(data, length, nil);
- break;
- }
- }
- if (prefIndex == prefCount) {
- if (cursor != data + length) {
- fprintf(gOutput, "••• TCPPrefsPrinter: Didn't consume all the data\n");
- DefaultPrinter(data, length, nil);
- }
- } else {
- fprintf(gOutput, "••• TCPPrefsPrinter: Didn't iterate far enough\n");
- DefaultPrinter(data, length, nil);
- }
- }
- }
-
- static void DomainListPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
- UInt8 *cursor;
- SInt16 domainCount;
- SInt16 domainIndex;
- Str255 thisDomain;
-
- if ( length < sizeof(SInt16) ) {
- fprintf(gOutput, "••• DomainListPrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- cursor = data;
- domainCount = *((SInt16 *)cursor);
- cursor += sizeof(SInt16);
- fprintf(gOutput, " fCount = %d\n", domainCount);
- for (domainIndex = 0; domainIndex < domainCount; domainIndex++) {
- if ( cursor + sizeof(UInt8) <= data + length ) {
- thisDomain[0] = *cursor;
- cursor += 1;
- if ( cursor + thisDomain[0] <= data + length ) {
- BlockMoveData(cursor, &thisDomain[1], thisDomain[0]);
- cursor += thisDomain[0];
- fprintf(gOutput, " [%d] = “%#s”\n", domainIndex, thisDomain);
- } else {
- break;
- }
- } else {
- break;
- }
- }
- if (domainIndex == domainCount) {
- if (cursor != data + length) {
- fprintf(gOutput, "••• DomainListPrinter: Didn't consume all the data\n");
- DefaultPrinter(data, length, nil);
- }
- } else {
- fprintf(gOutput, "••• DomainListPrinter: Didn't iterate far enough\n");
- DefaultPrinter(data, length, nil);
- }
- }
- }
-
- static void RouterListPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
- SInt16 routeCount;
- SInt16 routeIndex;
- OTCfgIRTEPrefs *prefData;
-
- prefData = (OTCfgIRTEPrefs *)data;
- routeCount = prefData->fCount;
- if ( length < sizeof(SInt16) || ( length != sizeof(SInt16) + routeCount * sizeof(OTCfgIRTEEntry)) ) {
- fprintf(gOutput, "••• RouterListPrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- fprintf(gOutput, " fCount = %d\n", routeCount);
- for (routeIndex = 0; routeIndex < routeCount; routeIndex++) {
- fprintf(gOutput, " fList[%d].fToHost = %s\n", routeIndex, FormatInetHost(prefData->fList[routeIndex].fToHost));
- fprintf(gOutput, " fList[%d].fViaHost = %s\n", routeIndex, FormatInetHost(prefData->fList[routeIndex].fViaHost));
- fprintf(gOutput, " fList[%d].fLocal = %d\n", routeIndex, prefData->fList[routeIndex].fLocal);
- fprintf(gOutput, " fList[%d].fHost = %d\n", routeIndex, prefData->fList[routeIndex].fHost);
- }
- }
- }
-
- static void UserLevelPrinter(UInt8 *data, ByteCount length, void *cookie)
- {
- #pragma unused(cookie)
- SInt16 value;
- char *name;
-
- if ( length != sizeof(SInt16) ) {
- fprintf(gOutput, "••• UserLevelPrinter: Weird size preference data\n");
- DefaultPrinter(data, length, nil);
- } else {
- value = *((SInt16*)data);
- switch ( value ) {
- case 1: name = "kBasicMode"; break;
- case 2: name = "kAdvancedMode"; break;
- case 3: name = "kAdminMode"; break;
- default: name = "unknown"; break;
- }
- fprintf(gOutput, " %s (%d)\n", name, value);
- }
- }
-
- typedef void (*PrinterProc)(UInt8 *data, ByteCount length, void *cookie);
-
- static void GetPrefTypeInfo(OSType prefType, char **userVisibleString, PrinterProc *printerProc, void **printerCookie)
- {
- *userVisibleString = "unknown";
- *printerProc = DefaultPrinter;
- *printerCookie = nil;
-
- switch (prefType) {
-
- // Backward Compatibility Preferences
-
- case 'resn':
- *userVisibleString = "Backward Compatibility Resource Name";
- *printerProc = PStringPrinter;
- break;
-
- case 'resi':
- *userVisibleString = "Backward Compatibility Resource ID";
- *printerProc = DecimalPrinter;
- break;
-
- case 'time':
- *userVisibleString = "Backward Compatibility Timestamp";
- *printerProc = DateTimePrinter;
- break;
-
- case 'ccfg':
- *userVisibleString = "kSelectedConfigType";
- *printerProc = DecimalPrinter;
- break;
-
- // Generic
-
- case 'pnam':
- *userVisibleString = "Preference Name";
- *printerProc = PStringPrinter;
- break;
-
- case kOTCfgTypeStruct:
- *userVisibleString = "kOTCfgTypeStruct";
- break;
- case kOTCfgTypeElement:
- *userVisibleString = "kOTCfgTypeElement";
- break;
- case kOTCfgTypeVector:
- *userVisibleString = "kOTCfgTypeVector";
- break;
- case kCfgTypefree:
- *userVisibleString = "kCfgTypefree";
- break;
-
- // Common to all the control panels
-
- case kOTCfgTypeWindowPosition:
- *userVisibleString = "kOTCfgTypeWindowPosition";
- break;
- // case kInfraredWindowPosAttr:
- // *userVisibleString = "kInfraredWindowPosAttr";
- // break;
- // case kTCPWindowPositionAttr:
- // *userVisibleString = "kTCPWindowPositionAttr";
- // break;
- case kOTCfgTypeAppleTalkVersion:
- *userVisibleString = "kOTCfgTypeAppleTalkVersion";
- *printerProc = DecimalPrinter;
- break;
- // case kCVRSResType:
- // *userVisibleString = "kCVRSResType";
- // break;
- // case kTCPVersionAttr:
- // *userVisibleString = "kTCPVersionAttr";
- // break;
- case kOTCfgTypeAppleTalkPort:
- *userVisibleString = "kOTCfgTypeAppleTalkPort";
- *printerProc = PStringPrinter;
- break;
- // case kPORTResType:
- // *userVisibleString = "kPORTResType";
- // break;
- // case kTCPPortAttr:
- // *userVisibleString = "kTCPPortAttr";
- // break;
- // case kRAConfigTypePort:
- // *userVisibleString = "kRAConfigTypePort";
- // break;
- case 'cnam':
- *userVisibleString = "kResourceCount";
- break;
- // case kATResourceCount:
- // *userVisibleString = "kATResourceCount";
- // break;
- // case kTCPResourceCount:
- // *userVisibleString = "kTCPResourceCount";
- // break;
- // case kModemResourceCount:
- // *userVisibleString = "kModemResourceCount";
- // break;
- // case kRAConfigNameType:
- // *userVisibleString = "kRAConfigNameType";
- // break;
- case kOTCfgTypeAppleTalkProtocol:
- *userVisibleString = "kOTCfgTypeAppleTalkProtocol";
- *printerProc = CStringPrinter;
- break;
- // case kTCPProtocolAttr:
- // *userVisibleString = "kTCPProtocolAttr";
- // break;
- case kOTCfgTypeAppleTalkPassword:
- *userVisibleString = "kOTCfgTypeAppleTalkPassword";
- break;
- // case kTCPPasswordAttr:
- // *userVisibleString = "kTCPPasswordAttr";
- // break;
- case kOTCfgTypeUserLevel:
- *userVisibleString = "kOTCfgTypeUserLevel";
- *printerProc = UserLevelPrinter;
- break;
- // case kUserModeResType:
- // *userVisibleString = "kUserModeResType";
- // break;
- // case kTCPUserLevelAttr:
- // *userVisibleString = "kTCPUserLevelAttr";
- // break;
- // case kTCPSelectedConfigType:
- // *userVisibleString = "kTCPSelectedConfigType";
- // break;
- // case kModemSelectedConfigType:
- // *userVisibleString = "kModemSelectedConfigType";
- // break;
- // case kRemoteSelectedConfigType:
- // *userVisibleString = "kRemoteSelectedConfigType";
- // break;
-
- // AppleTalk
-
- case kOTCfgTypeAppleTalkPrefs:
- *userVisibleString = "kOTCfgTypeAppleTalkPrefs";
- break;
- case kOTCfgTypeAppleTalkLocks:
- *userVisibleString = "kOTCfgTypeAppleTalkLocks";
- break;
- case kOTCfgTypeAppleTalkPortFamily:
- *userVisibleString = "kOTCfgTypeAppleTalkPortFamily";
- break;
-
- // Infrared
-
- // case kInfraredPrefsAttr:
- // *userVisibleString = "kInfraredPrefsAttr";
- // break;
- case kOTCfgTypeInfraredGlobal:
- *userVisibleString = "kOTCfgTypeInfraredGlobal";
- break;
-
- // TCP/IP
-
- case kOTCfgTypeTCPalis:
- *userVisibleString = "kOTCfgTypeTCPalis";
- break;
- case kOTCfgTypeTCPdcid:
- *userVisibleString = "kOTCfgTypeTCPdcid";
- break;
- case kOTCfgTypeTCPdtyp:
- *userVisibleString = "kOTCfgTypeTCPdtyp";
- *printerProc = DeviceTypePrinter;
- break;
- // case kIDNSResType:
- // *userVisibleString = "kIDNSResType";
- // break;
- // case kIHSTResType:
- // *userVisibleString = "kIHSTResType";
- // break;
- // case kIITFResType:
- // *userVisibleString = "kIITFResType";
- // break;
- // case kARAResType:
- // *userVisibleString = "kARAResType";
- // break;
- // case kIRTEResType:
- // *userVisibleString = "kIRTEResType";
- // break;
- // case kISDMResType:
- // *userVisibleString = "kISDMResType";
- // break;
- // case kSTNGResType:
- // *userVisibleString = "kSTNGResType";
- // break;
- // case kUNLDResType:
- // *userVisibleString = "kUNLDResType";
- // break;
- case kOTCfgTypeTCPDevType:
- *userVisibleString = "kOTCfgTypeTCPDevType";
- break;
- case kOTCfgTypeTCPPrefs:
- *userVisibleString = "kOTCfgTypeTCPPrefs";
- *printerProc = TCPPrefsPrinter;
- break;
- case kOTCfgTypeTCPServersList:
- *userVisibleString = "kOTCfgTypeTCPServersList";
- *printerProc = TCPServersListPrinter;
- break;
- case kOTCfgTypeTCPSearchList:
- *userVisibleString = "kOTCfgTypeTCPSearchList";
- *printerProc = TCPSearchListPrinter;
- break;
- case kOTCfgTypeTCPRoutersList:
- *userVisibleString = "kOTCfgTypeTCPRoutersList";
- *printerProc = RouterListPrinter;
- break;
- case kOTCfgTypeTCPDomainsList:
- *userVisibleString = "kOTCfgTypeTCPDomainsList";
- *printerProc = DomainListPrinter;
- break;
- case kOTCfgTypeTCPLocks:
- *userVisibleString = "kOTCfgTypeTCPLocks";
- break;
- case kOTCfgTypeTCPUnloadType:
- *userVisibleString = "kOTCfgTypeTCPUnloadType";
- *printerProc = TCPUnloadTypeAtrrPrinter;
- break;
-
- // Modem
-
- case kOTCfgTypeModemModem:
- *userVisibleString = "kOTCfgTypeModemModem";
- break;
- case kOTCfgTypeModemLocks:
- *userVisibleString = "kOTCfgTypeModemLocks";
- break;
- case kOTCfgTypeModemAdminPswd:
- *userVisibleString = "kOTCfgTypeModemAdminPswd";
- break;
- case kOTCfgTypeModemApp:
- *userVisibleString = "kOTCfgTypeModemApp";
- break;
-
- // Remote Access
-
- case kOTCfgTypeRemoteARAP:
- *userVisibleString = "kOTCfgTypeRemoteARAP";
- break;
- case kOTCfgTypeRemoteAddress:
- *userVisibleString = "kOTCfgTypeRemoteAddress";
- break;
- case kOTCfgTypeRemoteChat:
- *userVisibleString = "kOTCfgTypeRemoteChat";
- break;
- case kOTCfgTypeRemoteDialing:
- *userVisibleString = "kOTCfgTypeRemoteDialing";
- break;
- case kOTCfgTypeRemoteExtAddress:
- *userVisibleString = "kOTCfgTypeRemoteExtAddress";
- break;
- case kOTCfgTypeRemoteClientLocks:
- *userVisibleString = "kOTCfgTypeRemoteClientLocks";
- break;
- case kOTCfgTypeRemoteClientMisc:
- *userVisibleString = "kOTCfgTypeRemoteClientMisc";
- break;
- case kOTCfgTypeRemoteConnect:
- *userVisibleString = "kOTCfgTypeRemoteConnect";
- break;
- case kOTCfgTypeRemoteUser:
- *userVisibleString = "kOTCfgTypeRemoteUser";
- break;
- case kOTCfgTypeRemoteDialAssist:
- *userVisibleString = "kOTCfgTypeRemoteDialAssist";
- break;
- case kOTCfgTypeRemoteIPCP:
- *userVisibleString = "kOTCfgTypeRemoteIPCP";
- break;
- case kOTCfgTypeRemoteLCP:
- *userVisibleString = "kOTCfgTypeRemoteLCP";
- break;
- case kOTCfgTypeRemoteLogOptions:
- *userVisibleString = "kOTCfgTypeRemoteLogOptions";
- break;
- case kOTCfgTypeRemotePassword:
- *userVisibleString = "kOTCfgTypeRemotePassword";
- break;
- case kOTCfgTypeRemoteServerLocks:
- *userVisibleString = "kOTCfgTypeRemoteServerLocks";
- break;
- case kOTCfgTypeRemoteServer:
- *userVisibleString = "kOTCfgTypeRemoteServer";
- break;
- case kOTCfgTypeRemoteUserMode:
- *userVisibleString = "kOTCfgTypeRemoteUserMode";
- break;
- case kOTCfgTypeRemoteX25:
- *userVisibleString = "kOTCfgTypeRemoteX25";
- break;
- case kOTCfgTypeRemoteApp:
- *userVisibleString = "kOTCfgTypeRemoteApp";
- break;
-
- default:
- // do nothing
- break;
- }
- }
-
- /////////////////////////////////////////////////////////////////
- #pragma mark ----- Core Implementation -----
-
- static OSStatus DumpPref(CfgEntityAccessID prefsRefNum, prefType, PrinterProc printerProc, void *printerCookie)
- {
- OSStatus err;
- ByteCount prefSize;
- UInt8 *prefData;
-
- prefData = nil;
-
- err = OTCfgGetPrefsSize(prefsRefNum, prefType, &prefSize);
- if (err == noErr && prefSize != 0) {
- prefData = (UInt8*) NewPtr(prefSize);
- err = MemError();
- if (err == noErr) {
- MoreAssertQ(prefData != nil);
- err = OTCfgGetPrefs(prefsRefNum, prefType, prefData, prefSize);
- }
- if (err == noErr) {
- printerProc(prefData, prefSize, printerCookie);
- }
- }
-
- if (prefData != nil) {
- DisposePtr( (Ptr) prefData );
- MoreAssertQ(MemError() == noErr);
- }
-
- return err;
- }
-
- // static CfgPrefsHeader gPrefsTOCs[40];
-
- static OSStatus DumpEntity(CfgDatabaseRef ref, CfgEntityRef entity)
- {
- OSStatus err;
- OSStatus err2;
- CfgEntityAccessID accessID;
- ItemCount prefsTOCCount;
- ItemCount i;
- char *userVisibleString;
- PrinterProc printerProc;
- void *printerCookie;
- CfgPrefsHeader *prefsTOCs;
-
- prefsTOCs = nil;
-
- err = OTCfgOpenPrefs(ref, &entity, false, &accessID);
- if (err == noErr) {
- err = OTCfgGetPrefsTOCCount(accessID, &prefsTOCCount);
- if (err == noErr) {
- prefsTOCs = (CfgPrefsHeader *) NewPtr( prefsTOCCount * sizeof(CfgPrefsHeader));
- err = MemError();
- }
- if (err == noErr) {
- err = OTCfgGetPrefsTOC(accessID, &prefsTOCCount, prefsTOCs);
- }
- if (err == noErr) {
- for (i = 0; i < prefsTOCCount; i++) {
- GetPrefTypeInfo(prefsTOCs[i].fType, &userVisibleString, &printerProc, &printerCookie);
- fprintf(gOutput, " Preference\n");
- fprintf(gOutput, " fSize = %hd\n", prefsTOCs[i].fSize);
- fprintf(gOutput, " fVersion = %hd\n", prefsTOCs[i].fVersion);
- fprintf(gOutput, " fType = '%4.4s' “%s”\n", &prefsTOCs[i].fType, userVisibleString);
- err = DumpPref(accessID, prefsTOCs[i].fType, printerProc, printerCookie);
- if (err != noErr) {
- break;
- }
- }
- }
-
- err2 = OTCfgClosePrefs(accessID);
- if (err == noErr) {
- err = err2;
- }
- }
- if (prefsTOCs != nil) {
- DisposePtr( (Ptr) prefsTOCs );
- MoreAssertQ(MemError() == noErr);
- }
- return err;
- }
-
- // static CfgEntityRef gEntityRefs[20];
- // static CfgEntityInfo gEntityInfos[20];
-
- static OSStatus DumpArea(CfgDatabaseRef ref, CfgAreaID thisArea)
- {
- OSStatus err;
- OSStatus err2;
- ItemCount entityCount;
- Str255 entityName;
- ItemCount i;
- CfgEntityRef *entityRefs;
- CfgEntityInfo *entityInfos;
-
- entityRefs = nil;
- entityInfos = nil;
-
- err = OTCfgOpenArea(ref, thisArea);
- if (err == noErr) {
- err = OTCfgGetEntitiesCount(ref, thisArea, kCfgClassAnyEntity, kCfgTypeAnyEntity, &entityCount);
- if (err == noErr) {
- entityRefs = (CfgEntityRef *) NewPtr( entityCount * sizeof(CfgEntityRef));
- err = MemError();
- }
- if (err == noErr) {
- entityInfos = (CfgEntityInfo *) NewPtr( entityCount * sizeof(CfgEntityInfo));
- err = MemError();
- }
- err = OTCfgGetEntitiesList(ref, thisArea,
- kCfgClassAnyEntity,
- kCfgTypeAnyEntity,
- &entityCount,
- entityRefs,
- entityInfos);
- if (err == noErr) {
- for (i = 0; i < entityCount; i++) {
- OTCfgGetEntityName(&entityRefs[i], entityName);
- fprintf(gOutput, " Dumping entity “%#s”\n", entityName);
- fprintf(gOutput, " CfgEntityRef\n");
- fprintf(gOutput, " fLoc = %ld\n", entityRefs[i].fLoc);
- fprintf(gOutput, " fReserved = %ld\n", entityRefs[i].fReserved);
- fprintf(gOutput, " fID = %#s\n", entityRefs[i].fID);
- fprintf(gOutput, " CfgEntityInfo\n");
- fprintf(gOutput, " fClass = '%4.4s' “%s”\n", &entityInfos[i].fClass, ClassToString(entityInfos[i].fClass));
- fprintf(gOutput, " fType = '%4.4s' “%s”\n", &entityInfos[i].fType, TypeToString(entityInfos[i].fType));
- fprintf(gOutput, " fIcon\n");
- fprintf(gOutput, " fFile\n");
- fprintf(gOutput, " vRefNum = %hd\n", entityInfos[i].fIcon.fFile.vRefNum);
- fprintf(gOutput, " parID = %ld\n", entityInfos[i].fIcon.fFile.parID);
- fprintf(gOutput, " name = %#s\n", entityInfos[i].fIcon.fFile.name);
- fprintf(gOutput, " fResID = %hd\n", entityInfos[i].fIcon.fResID);
-
- err = DumpEntity(ref, entityRefs[i]);
- if (err != noErr) {
- break;
- }
- }
- }
-
- err2 = OTCfgCloseArea(ref, thisArea);
- if (err == noErr) {
- err = err2;
- }
- }
-
- if (entityRefs != nil) {
- DisposePtr( (Ptr) entityRefs);
- MoreAssertQ(MemError() == noErr);
- }
- if (entityInfos != nil) {
- DisposePtr( (Ptr) entityInfos);
- MoreAssertQ(MemError() == noErr);
- }
- return err;
- }
-
- static OSStatus DumpDatabaseToFile(void)
- {
- OSStatus err;
- OSStatus err2;
- CfgDatabaseRef ref;
- ItemCount areaCount;
- CfgAreaID currentArea;
- ItemCount i;
- CfgAreaID *areas;
- Str255 *areaNames;
-
- areas = nil;
- areaNames = nil;
-
- err = OTCfgOpenDatabase(&ref);
- if (err == noErr) {
- err = OTCfgGetAreasCount(ref, &areaCount);
- if (err == noErr) {
- areas = (CfgAreaID *) NewPtr( areaCount * sizeof(CfgAreaID) );
- err = MemError();
- }
- if (err == noErr) {
- areaNames = (Str255 *) NewPtr( areaCount * sizeof(Str255) );
- err = MemError();
- }
- if (err == noErr) {
- err = OTCfgGetAreasList(ref, &areaCount, areas, areaNames);
- }
-
- if (err == noErr) {
- err = OTCfgGetCurrentArea(ref, ¤tArea);
- }
-
- if (err == noErr) {
- for (i = 0; i < areaCount; i++) {
- fprintf(gOutput, "Dumping area %ld “%#s”\n", areas[i], areaNames[i]);
- if ( OTCfgIsSameAreaID(currentArea, areas[i]) ) {
- fprintf(gOutput, " <current area>\n");
- }
- err = DumpArea(ref, areas[i]);
- if (err != noErr) {
- break;
- }
- }
- }
-
- err2 = OTCfgCloseDatabase(&ref);
- if (err == noErr) {
- err = err2;
- }
- }
- if (areas != nil) {
- DisposePtr( (Ptr) areas);
- MoreAssertQ(MemError() == noErr);
- }
- if (areaNames != nil) {
- DisposePtr( (Ptr) areaNames);
- MoreAssertQ(MemError() == noErr);
- }
- return err;
- }
-
- static void InitToolbox(void)
- {
- InitGraf(&qd.thePort);
- InitFonts();
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(nil);
- MaxApplZone();
- MoreMasters();
- MoreMasters();
- MoreMasters();
- }
-
- extern void main(void)
- {
- OSStatus err;
- StandardFileReply reply;
-
- InitToolbox();
-
- StandardPutFile("\pSave Network Setup database as text:", "\pNetworkSetup.txt", &reply);
- if (reply.sfGood) {
- (void) FSpDelete(&reply.sfFile);
- gOutput = FSp_fopen(&reply.sfFile, "w");
- if (gOutput == nil) {
- err = -1;
- }
- if (err == noErr) {
- err = DumpDatabaseToFile();
-
- (void) fclose(gOutput);
- }
- if (err != noErr) {
- printf("Failed with error %ld.\n", err);
- }
-
- }
- }